import router from './router' // 路由跳转
import { asyncRoutes } from '@/router/index' // 导入动态路由
import store from './store' // 导入store 拿token
// import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar  进度条插件
import 'nprogress/nprogress.css' // progress bar style   进度条插件样式
// import { getToken } from '@/utils/auth' // get token from cookie
// import getPageTitle from '@/utils/get-page-title'

// NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login', '/404'] // no redirect whitelist

router.beforeEach(async(to, from, next) => {
  NProgress.start() // 开启进度条插件
  // start progress bar
  if (store.getters.token) {
    if (to.path === '/login') { // 如果再次访问登录页 回到首页
      next('/')
    } else {
      // 有token  可以直接去不是登录页的网页
      // 修改为先跳转,然后根据vue的响应式原理 跳转后数据更新让页面无感刷新
      next()
      // 如果已经有用户信息,那么就不在调用发送获取用户信息的请求
      if (!store.getters.name) {
        const res = await store.dispatch('user/getUserInfo')
        // 通过vuex中的个人信息来过滤个人的路由权限
        // 获取vuex中userInfo中的roles中的数组 其中menus决定了能访问哪些页面,points能使用页面下的哪些功能
        // console.log(res)
        console.log(res.roles.menus) // 成功获取到当前账户的vuex的页面权限
        // console.log(store.state.user.userInfo.roles.menus)成功获取 就是有点长

        // 把动态router和vuex中的menus来进行过滤,过滤出来的保存在vuex中?
        const canToRouter = asyncRoutes.filter(router => { // router是一个对象 这个对象下的children的第一个索引.name就是要和res.roles.menus匹配的数据
          return res.roles.menus.includes(router.children[0].name)
        })
        store.commit('menus/getRouterList', canToRouter) // 把需要在菜单上渲染的数据储存到vuex中
        console.log('asdasdadasdzxv', canToRouter) // 因为是管理员账号,如果有没有匹配上的动态路由,需要手动给名字改为一致
        // 通过addRoutes把匹配完动态路由添加到路由实例中
        // 因为路由的位置为敌,需要把404页面放在最后(最后一个动态路由的后面) // 404 page must be placed at the end !!!

        router.addRoutes([...canToRouter], [{ path: '*', redirect: '/404', hidden: true }])
      }
    }
  // 如果存在token
  } else {
  //  没有token
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next(`/login?redirect=${to.path}`) // 携带当前要访问的页面路径
      // next('/login')
    }
  }
})

router.afterEach(() => {
  // finish progress bar
  // 关闭进度条
  NProgress.done()
})
